package interview;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class LruCache {
    public static void main(String[] args){
        LinkedHashMap<Integer,Integer> map = new LinkedHashMap<>(0,0.75f,true);
        map.put(0, 0);
        map.put(1, 1);
        map.put(2, 2);
        map.put(3, 3);
        map.put(4, 4);
        map.put(5, 5);
        map.put(6, 6);
        map.get(3);
        map.get(4);
        Set<Map.Entry<Integer,Integer>> set = map.entrySet();
        System.out.println("set:" + set.toString());


        for(Map.Entry<Integer,Integer> entry : map.entrySet()){
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }

        /***
         * 0:0
         * 1:1
         * 2:2
         * 5:5
         * 6:6
         * 3:3
         * 4:4
         */
        System.out.println("-5:" + countOf1(-5));
        int a = -5;
        // 取反是指 按位取反，包括符号位
        int b = ~a;
        // 逻辑非 只能对 boolean 型操作符进行运算
        // int c = !a;
        System.out.println("-5:" + countOf1(b));
        System.out.println("b:" + b);
    }



    public static int countOf1(int n) {
        if(n == 0) return 0;
        int count = 0;

        /**当n为负数，去除最高位的符号位（即-1），将n变为正数*/
        if(n < 0){
            count++;
            //先左移一位，将符号位的1挤掉，再无符号右移一位，高位补0,即为正数
            n = (n<<1) >>> 1;
        }
        do{
            //n和1做与运算，即求最低位是否为1
            if((n&1) == 1) count ++ ;
            //然后n右移，挤掉最低位
        }while((n = n>>>1) > 0);
        return count;
    }
}
